package com.tinet.sistReserva.DAO;

import java.util.ArrayList;

import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
//import javax.persistence.Query;

import com.tinet.sistReserva.model.Reserva;
import com.tinet.sistReserva.model.Usuario;

/**
 * 
 * Clase que implementa los metodos de la interfaz InterfazReservaBean.
 * 
 * @author Frmancil
 */
public class ReservaDao implements InterfazReservaDao {
    /**
     * Manejador de entidad.
     */
    private EntityManager emReserva;

    /**
     * Constructor que inicializa el manejador de entidad em para cada objeto
     * ReservaDao creado.
     * 
     * @param emReserva
     *            Manejador de entidad.
     */
    public ReservaDao(EntityManager emReserva) {
        this.emReserva = emReserva;
    }

    /**
     * {@inheritDoc}
     */
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void reservar(Reserva reservaARealizar) {
        emReserva.persist(reservaARealizar);
    }

    /**
     * {@inheritDoc}
     */
    public void eliminar(Reserva reservaAEliminar) {
        // if (buscarReserva(reservaAEliminar) != null) {
        emReserva.remove((reservaAEliminar));
        // }
    }

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("unchecked")
    public ArrayList<Reserva> listar() {
        return (ArrayList<Reserva>) emReserva.createQuery(
                "SELECT R FROM Reserva R").getResultList();

    }

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("unchecked")
    public ArrayList<Reserva> listarMisReservas(Usuario usuarioABuscar) {
        return (ArrayList<Reserva>) emReserva
                .createQuery(
                 "SELECT R FROM Reserva R WHERE R.Usuario_username=:username")
                .setParameter("username", usuarioABuscar.getUsername())
                .getSingleResult();
    }

}
